The security of computing resources and associated data is of high importance in many contexts. As an example, organizations often utilize networks of computing devices to provide a robust set of services to their users. Networks often span multiple geographic boundaries and often connect with other networks. An organization, for example, may support its operations using both internal networks of computing resources and computing resources managed by others. Computers of the organization, for instance, may communicate with computers of other organizations to access and/or provide data while using services of another organization. In many instances, organizations configure and operate remote networks using hardware managed by other organizations, thereby reducing infrastructure costs and achieving other advantages. With such configurations of computing resources, ensuring that access to the resources and the data they hold is secure can be challenging, especially as the size and complexity of such configurations grow.
Encryption, for example, is used extensively for the purpose of preventing unauthorized access to data. Generally, a cryptographic key is used to reversibly transform data to a state where information is both computationally and humanly unascertainable without access to the cryptographic key or without extraordinary measures (e.g., a cryptographic attack). Many encryption algorithms rely on the use of a cryptographic nonce, a number or bits of information that are to be only used once in the context of an encryption, and may be necessary to properly perform decryption. Conventional encryption systems may impose constraints on the use of nonces, such as the nonce's uniqueness or that the same cryptographic key and nonce must be used in both encryption and decryption. Generally, it is desirable to enforce these constraints to prevent the weakening of the encryption system or to enforce the proper usage of nonces.